// EMConnecter.h 
// Emax_WiFiControl 
// 
// Created by HCC on 2018/12/12. 
//  
//

#import <Foundation/Foundation.h>

#define  kTimeout 3

@class EMModeConfig;
@class EMCommand;

@protocol EMConnecterProtocol <NSObject>

/**
 *  连接成功 (子类直接调用,不需要重写)
 */
- (void)didConnected;

/**
 *  连接断开 (子类直接调用,不需要重写)
 */
- (void)disConnected;

/**
 *  任务中断,失败 (子类直接调用,不需要重写)
 */
- (void)taskFailed;
/**
 *  任务阶段完成 (子类直接调用,不需要重写)
 */
- (void)taskSuccess;
/**
 *  下一条指令检查 (子类直接调用,不需要重写)
 */
- (void)nextCommandCheck;
/**
 *  发送指令 (子类实现发送业务)
 */
- (void)sendCurrentCommand;

@end


@interface EMConnecter : NSObject <EMConnecterProtocol>

/**
 >> @brief  配置信息  */
@property(nonatomic, strong, readonly) EMModeConfig *config;
/**
 >> @brief  当前正在执行的指令  */
@property(nonatomic, strong) EMCommand *curCMD;
/**
 >> @brief  指令池  */
@property(nonatomic, strong) NSMutableArray *commands;
/**
 >> @brief  指令超时机制  */
@property(nonatomic, strong) NSTimer *timer;
/**
 >> @brief  重试次数(针对指令池中的每条指令)  */
@property(nonatomic, assign) NSUInteger retryCount;

/**
 >> @brief  是否关闭  */
@property(nonatomic, assign) BOOL isClosed;

/**
 >> @brief  是否交互结束  */
@property(nonatomic, assign) BOOL isComplete;

/**
 >> @brief  连接超时机制(15秒)  */
@property(nonatomic, strong) NSTimer *connectTimer;

/* ============================================================ */
#pragma mark - API
/* ============================================================ */

/**
 *  实例化连接器
 *
 *  @param  config  配置器
 */
- (instancetype)initWithConfig:(EMModeConfig *)config;


/**
 *  开始任务
 *
 */
- (void)startConnectDevice;


/**
 *  配对进度回调
 *
 *  @param  progress  进度值
 *  @param  isSuccess 当前阶段是否成功
 *
 *  progress == 1 && isSuccess == YES 表示配对完成
 */
@property (nonatomic, copy) void (^pairProgressChanged)(double progress, BOOL isSuccess);


/**
 *  关闭连接
 *
 */
- (void)close;



@end

